<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <link href="../css/style.css" rel="stylesheet" type="text/css">
</head><body>
<h1>3.3. Организация памяти</h1>
<p class="article">
Хотя процессор имеет 20-разрядную адресную шину, которая соединяет его с 
физической памятью, он оперирует с 16-битными логическими адресами, состоящими 
из 16-разрядного базового адреса сегмента и 16 разрядного смещения в сегменте. 
Физические, 20-разрядные адреса данных и команд формируются путем сложения 
содержимого регистров-указателей и смещенного на 4 бита влево содержимого 
сегментных регистров. Т.н. эффективный адрес данных получается как сумма 
содержимого регистров BX или BP, содержимого регистров SI или DI и смещения.
Затем из эффективного адреса и содержимого сегментного регистра формируется 
физический адрес (Рис. 2.6). В формировании физического адреса команды участвуют 
IP и CS. 
</p>
<p class="article">
Таким образом, адресное пространство разбивается на 4 сегмента емкостью 
64К адресов по числу сегментных регистров. Регистр CS указывает на текущий 
сегмент кода (программы), откуда выбираются команды. Регистр DS указывает на 
текущий сегмент данных, в котором содержатся переменные. Регистр SS адресует 
текущий сегмент стека, в котором реализуются все стековые операции. Наконец, 
регистр ES определяет текущий дополнительный сегмент данных. Смещенное 
содержимое сегментного регистра определяет положение сегмента в 20-разрядном 
адресном пространстве, а регистры-указатели определяют положение команды или 
данных внутри сегментов. Поскольку при формировании эффективного адреса 
содержимое сег ментного регистра сдвигается на 4 бита, сегмент всегда начинается 
с адреса, кратного 16, т.е. на границе 16-байтового блока памяти (параграфа). 
Сегменты в памяти могут располагаться как последовательно, так и с наложением 
друг на друга. Если программа превышает 64 Кбайт, то необходимо перезагружать 
сегментный регистр CS новым значением базового адреса. Точно также, если данные 
превышают 64 Кбайт, то необходимо перезагрузить регистр DS.
</p>
<div class="image">
	<img src="../img/address_resolve.png" />
	<p>Формирование физического адреса данных и команды</p>
</div>
<p class="article">
Память организована в виде одномерного массива байтов с физическими адресами от 
0000016 до FFFFF16. Две области адресного пространства памяти зарезервированы 
для выполнения специальных функций, связанных с обработкой прерываний и системным 
сбросом. Этими областями являются первые 128 байт (физические адреса 00000 - 0007F) 
и последние 16 байт (физические адреса FFFF0 - FFFFF). Данные области использовать 
для других целей нельзя.
</p>
<p class="article">
Байты в памяти организуются в слова таким образом, что байту, имеющему меньший 
адрес, соответствуют менее значимые позиции разрядов в слове. Каждый байт или 
слово памяти адресуется с помощью 20-битного адреса, причем в случае адресации 
слова адрес указывает на его младшую часть. Например, адрес 0000016 может 
обозначать и байт с этим адресом, что условно записывается в виде [00000] = 34h, 
и слово с таким же адресом, что записывается в виде [00000] = 1234h. 
Тогда старший байт слова, [00001] = 12h. Квадратные скобки обозначают ячейку 
памяти, адрес которой находится в этих скобках, h – шестнадцатеричную 
систему счисления. Команды, байты и слова можно размещать по любому адресу 
байта, однако рекомендуется размещать слова в памяти по четным адресам, так как
процессор может передавать такие слова за один цикл обращения к памяти. 
Слово с четным адресом называется выравненным на границу слова. Слова с нечетными 
адресами (невыравненные) также допустимы, однако они считываются в два раза 
медленнее (требуют два цикла обращения к памяти).
</p>
</body></html>
